#include "TcpServer.hpp"
#include "ServerCal.hpp"
#include <unistd.h>

static void Usage(const std::string& proc) {
    std::cout << "\n\tUsage: " << proc << " port\n" << std::endl;
}

int main(int argc, char* argv[]) {
    if (argc != 2) {
        Usage(argv[0]);
        exit(0);
    }
    uint16_t port = std::stoi(argv[1]);
    ServerCal cal;
    //std::bind的作用： 将成员函数绑定到特定对象，创建一个可调用对象
    //bind作用，类的成员函数第一个参数是this指针，bind把第一个参数固定写死成this指针，后续调用可省略
    TcpServer *tsvp = new TcpServer(port, std::bind(&ServerCal::Calculator, &cal, std::placeholders::_1));
    tsvp->InitServer();
    // daemon(0, 0);
    tsvp->Start();
}


// int main() {
//     // //测试Request 需要带头文件Protocol.hpp
//     // Request req(123, 456, '+');
//     // std::string s;
//     // req.Serialize(&s);
//     // s = Encode(s);
//     // std::cout << s << std::endl;

//     // std::string content;
//     // bool r = Decode(s, &content);
//     // std::cout << content << std::endl;   

//     // Request temp;
//     // temp.Deserialize(content);
//     // std::cout << temp.x << std::endl << temp.op << std::endl << temp.y << std::endl;


//     //测试Response
//     Response resp(1000, 0);
//     std::string content;
//     resp.Serialize(&content);
//     std::cout << content << std::endl;
//     std::string package = Encode(content);
//     std::cout << package << std::endl;

//     content = "";
//     bool r = Decode(package, &content);
//     std::cout << content << std::endl;

//     Response temp;
//     temp.Deserialize(content);
//     std::cout << temp.result << std::endl;
//     std::cout << temp.code << std::endl;

//     return 0;
// }